#ifndef __ISDU_HANDLER__
#define __ISDU_HANDLER__
#include "Type_Define.h"
#include "IO_LINK_Global_Param.h"
#include "DL_Message_Handler.h"
#include "IO_LINK_DataBuffer.h"
#include "Phy_Driver.h"

typedef enum{
  ISDU_ParamRequest,
  ISDU_DL_ISDUTransport,
  ISDU_Transmssion_completed,
  
}ISDU_Trans_BOOLType;

typedef enum{
	ISDU_Cnf_Positive,
	ISDU_Cnf_Nagtive
}ISDU_Cnf_Type;

typedef struct{
   DL_ISDU_Channel_TypeDef ISDU_Channel;
   uint8_t ISDUBufferOutLen;
   uint8_t ISDUBUfferInLen;
   ISDU_Trans_BOOLType ISDU_Trans_BOOL;
   uint8_t ISDU_Pointer; 
   uint8_t ISDU_FlowCtrl;
   uint16_t ISDU_ErrorType; 
   uint8_t * ISDUData; //ISDU数据指针
   uint8_t ISDUDataLen;// Read读出的数据长度
	 ISDU_Cnf_Type ISDU_Cnf;
}ISDU_PARAM_TypeDef;

typedef enum{
 ISDU_Inactive_0,
 ISDU_Idle_1,
 subISDUWaitPage_1_1,//自定义子状态，用于等待收到的OD，
 //当收到MH发送的自定义事件Event_OD_Return后，则返回状态ISDU_Idle_1
 ISDURequest_2,  //无需自定义子状态 
 ISDUWait_3,
 subISDUWaitReturnISDU_3_1,//自定义子状态
 ISDUError_4,
 ISDUResponse_5,
 subISDUWaitReturnISUD_5_1//自定义子状态
  //当收到MH发送的自定义事件Event_OD_Return后，则返回状态ISDUWait_3
}DL_ISDU_STATE_TYPE;  

extern ISDU_PARAM_TypeDef ISDU_PARAM[PORT_NUM];

extern DL_ISDU_STATE_TYPE ISDU_STATE[PORT_NUM];

void Event_ISDUTrig(uint8_t Port);

void Event_IH_Conf_ACTIVE(uint8_t Port);
void Event_IH_Conf_INACTIVE(uint8_t Port);
void Event_ISDUTrig(uint8_t Port);
void Event_ISDU_Data_writen(uint8_t Port);


void Event_ISDU_ResponseStart(uint8_t Port);

void Event_ISDU_Error(uint8_t Port);
void Event_DL_ISDUAbort(uint8_t Port);

void ISDU_Init(void);



 
void DL_ISDU_T13_1(uint8_t Port);


/******转移动作************************************/

void DL_ISDU_T1(uint8_t Port);

void DL_ISDU_T2(uint8_t Port);

void DL_ISDU_T3(uint8_t Port);
 
void DL_ISDU_T4(uint8_t Port);

void DL_ISDU_T5(uint8_t Port);

//自定义子子状态subISDUwait_3的转移函数，当发生Event_return_OD时触发
//此函数解析ISDU，判断是否开始接收
void DL_ISDU_T5_1(uint8_t Port);
void DL_ISDU_T6(uint8_t Port);

//自定义子子状态subISDUwait_3的转移函数，当发生Event_return_OD时触发
//此函数解析ISDU，判断是否结束接收
void DL_ISDU_T7_1(uint8_t Port);
void DL_ISDU_T7(uint8_t Port);

void DL_ISDU_T8(uint8_t Port);

void DL_ISDU_T11(uint8_t Port);
void DL_ISDU_T13(uint8_t Port);
//自定义子状态的转移函数
void DL_ISDU_T13_1(uint8_t Port);
void DL_ISDU_T14(uint8_t Port);

#endif
